const redis = require('redis');
const redisConfig = require('../../config/redis.config.js')

// Redis客户端配置
const { password, host, port } = redisConfig
const redisClient = redis.createClient({
  url: password ? `redis://:${password}@${host}:${port}` : `redis://${host}:${port}`
});

// 处理Redis连接错误
redisClient.on('error', (err) => {
  console.error('Redis连接错误:', err);
});

// 连接Redis
(async () => {
  await redisClient.connect();
  console.log('Redis连接成功');
  // console.log('redisClient.get(1)', await redisClient.get('1'));
})();

// ===== 黑名单操作 =====
/**
 * 将令牌加入黑名单
 * @param {string} jti - 令牌唯一标识
 * @param {number} expiresIn - 过期时间（秒）
 */
redisClient.addToBlacklist = async (jti, expiresIn) => {
  try {
    await redisClient.setEx(
      `blacklist:${jti}`, // 键名前缀，避免与其他数据冲突
      expiresIn,
      'true' // 值可任意，仅用于判断存在性
    );
	console.log('添加黑名单成功');
  } catch (err) {
    console.error('添加黑名单失败:', err);
    throw err; // 向上抛出，让调用者处理
  }
};

/**
 * 检查令牌是否在黑名单中
 * @param {string} jti - 令牌唯一标识
 * @returns {boolean} 是否在黑名单中
 */
redisClient.isBlacklisted = async (jti) => {
  try {
    const result = await redisClient.get(`blacklist:${jti}`);
    return result === 'true';
  } catch (err) {
    console.error('检查黑名单失败:', err);
    return false; // 失败时默认不视为黑名单（可根据需求调整）
  }
};

module.exports = redisClient
